package main

import (
	"fmt"
	"strings"
)

////我写的
//func intToRoman(num int) string {
//	s := ""
//	for i := 0; i < num/1000; i++ {
//		s += "M"
//	}
//	if num%1000/100 == 9 {
//		s += "CM"
//	} else if num%1000/100 == 4 {
//		s += "CD"
//	} else if num%1000/100 >= 5 && num%1000/100 <= 8 {
//		s += "D"
//		for i := 0; i < num%1000/100-5; i++ {
//			s += "C"
//		}
//	} else if num%1000/100 > 0 && num%1000/100 <= 3 {
//		for i := 0; i < num%1000/100; i++ {
//			s += "C"
//		}
//	}
//	if num%1000%100/10 == 9 {
//		s += "XC"
//	} else if num%1000%100/10 == 4 {
//		s += "XL"
//	} else if num%1000%100/10 >= 5 && num%1000%100/10 <= 8 {
//		s += "L"
//		for i := 0; i < num%1000%100/10-5; i++ {
//			s += "X"
//		}
//	} else if num%1000%100/10 > 0 && num%1000%100/10 <= 3 {
//		for i := 0; i < num%1000%100/10; i++ {
//			s += "X"
//		}
//	}
//	if num%10 == 9 {
//		s += "IX"
//	} else if num%10 == 4 {
//		s += "IV"
//	} else if num%10 >= 5 && num%10 <= 8 {
//		s += "V"
//		for i := 0; i < num%10-5; i++ {
//			s += "I"
//		}
//	} else if num%10 > 0 && num%10 <= 3 {
//		for i := 0; i < num%10; i++ {
//			s += "I"
//		}
//	}
//
//	return s
//
//}

//// 官方
//var valueSymbols = []struct {
//	value  int
//	symbol string
//}{
//	{1000, "M"},
//	{900, "CM"},
//	{500, "D"},
//	{400, "CD"},
//	{100, "C"},
//	{90, "XC"},
//	{50, "L"},
//	{40, "XL"},
//	{10, "X"},
//	{9, "IX"},
//	{5, "V"},
//	{4, "IV"},
//	{1, "I"},
//}
//
//func intToRoman(num int) string {
//	roman := []byte{}
//	for _, vs := range valueSymbols {
//		for num >= vs.value {
//			num -= vs.value
//			roman = append(roman, vs.symbol...)
//		}
//		if num == 0 {
//			break
//		}
//	}
//	return string(roman)
//}

func intToRoman(num int) string {
	vals := []int{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}
	mp := map[int]string{1000: "M", 900: "CM", 500: "D", 400: "CD", 100: "C", 90: "XC", 50: "L", 40: "XL", 10: "X", 9: "IX", 5: "V", 4: "IV", 1: "I"}
	s := make([]byte, 0)
	//从大到小进行整除
	for _, n := range vals {
		count := num / n
		for i := 0; i < count; i++ {
			//将字符串当做字节切片
			s = append(s, mp[n]...)
		}
		num -= count * n
	}
	return string(s)
}

func main() {
	fmt.Println("MMMDCCXLIX", intToRoman(3749))
	fmt.Println("LVIII", intToRoman(58))
	fmt.Println("MCMXCIV", intToRoman(1994))
	var s strings.Builder

	s.WriteString("hello")

	fmt.Println(s)

}
